
<!DOCTYPE html>
<html lang="zh_cn">
<head>
    <meta charset="utf-8" />
    <title>我的第一份实习（不正经的碎碎念） | 白熊の窝</title>
    <meta name="author" content="白熊_IceBear" />
    <meta name="description" content="一只会爱与破坏的白熊" />
    <meta name="keywords" content="计算机爱好者" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" />
    <link rel="icon" href="/images/avatar.jpg" />
    <link rel="preconnect" href="https://s4.zstatic.net" />
<script src="https://s4.zstatic.net/ajax/libs/vue/3.3.7/vue.global.prod.min.js"></script>
<link rel="stylesheet" href="https://s4.zstatic.net/ajax/libs/font-awesome/6.4.2/css/all.min.css" />
<link rel="preconnect" href="https://fonts.loli.net" />
<link rel="preconnect" href="https://gstatic.loli.net" crossorigin />
<link rel="stylesheet" href="https://fonts.loli.net/css2?family=Fira+Code:wght@400;500;600;700&family=Lexend:wght@400;500;600;700;800;900&family=Noto+Sans+SC:wght@400;500;600;700;800;900&display=swap" />
<script> const mixins = {}; </script>

<script src="https://polyfill.io/v3/polyfill.min.js?features=default"></script>


<script src="https://s4.zstatic.net/ajax/libs/highlight.js/11.9.0/highlight.min.js"></script>
<script src="https://s4.zstatic.net/ajax/libs/highlightjs-line-numbers.js/2.8.0/highlightjs-line-numbers.min.js"></script>
<link
    rel="stylesheet"
    href="https://s4.zstatic.net/ajax/libs/highlight.js/11.9.0/styles/github.min.css"
/>
<script src="/js/lib/highlight.js"></script>


<script src="https://s4.zstatic.net/ajax/libs/KaTeX/0.16.9/katex.min.js"></script>
<script src="https://s4.zstatic.net/ajax/libs/KaTeX/0.16.9/contrib/auto-render.min.js"></script>
<link rel="stylesheet" href="https://s4.zstatic.net/ajax/libs/KaTeX/0.16.9/katex.min.css" />
<script src="/js/lib/math.js"></script>


<script src="/js/lib/preview.js"></script>









<link rel="stylesheet" href="/css/main.css" />

<meta name="generator" content="Hexo 7.1.1"></head>
<body>
    <div id="layout">
        <transition name="fade">
            <div id="loading" v-show="loading">
                <div id="loading-circle">
                    <h2>LOADING</h2>
                    <p>加载过慢请开启缓存 浏览器默认开启</p>
                    <img src="/images/loading.gif" />
                </div>
            </div>
        </transition>
        <div id="menu" :class="{ hidden: hiddenMenu, 'menu-color': menuColor}">
    <nav id="desktop-menu">
        <a class="title" href="/">
            <span>白熊の窝</span>
        </a>
        
        <a href="/">
            <i class="fa-solid fa-house fa-fw"></i>
            <span>&ensp;首页</span>
        </a>
        
        <a href="/archives">
            <i class="fa-solid fa-box-archive fa-fw"></i>
            <span>&ensp;文章</span>
        </a>
        
        <a href="/categories/%E7%BB%8F%E5%8E%86">
            <i class="fa-solid fa-bookmark fa-fw"></i>
            <span>&ensp;类别</span>
        </a>
        
        <a href="/tags/2024">
            <i class="fa-solid fa-tags fa-fw"></i>
            <span>&ensp;标签</span>
        </a>
        
    </nav>
    <nav id="mobile-menu">
        <div class="title" @click="showMenuItems = !showMenuItems">
            <i class="fa-solid fa-bars fa-fw"></i>
            <span>&emsp;白熊の窝</span>
        </div>
        <transition name="slide">
            <div class="items" v-show="showMenuItems">
                
                <a href="/">
                    <div class="item">
                        <div style="min-width: 20px; max-width: 50px; width: 10%">
                            <i class="fa-solid fa-house fa-fw"></i>
                        </div>
                        <div style="min-width: 100px; max-width: 150%; width: 20%">首页</div>
                    </div>
                </a>
                
                <a href="/archives">
                    <div class="item">
                        <div style="min-width: 20px; max-width: 50px; width: 10%">
                            <i class="fa-solid fa-box-archive fa-fw"></i>
                        </div>
                        <div style="min-width: 100px; max-width: 150%; width: 20%">文章</div>
                    </div>
                </a>
                
                <a href="/categories/%E7%BB%8F%E5%8E%86">
                    <div class="item">
                        <div style="min-width: 20px; max-width: 50px; width: 10%">
                            <i class="fa-solid fa-bookmark fa-fw"></i>
                        </div>
                        <div style="min-width: 100px; max-width: 150%; width: 20%">类别</div>
                    </div>
                </a>
                
                <a href="/tags/2024">
                    <div class="item">
                        <div style="min-width: 20px; max-width: 50px; width: 10%">
                            <i class="fa-solid fa-tags fa-fw"></i>
                        </div>
                        <div style="min-width: 100px; max-width: 150%; width: 20%">标签</div>
                    </div>
                </a>
                
            </div>
        </transition>
    </nav>
</div>
<transition name="fade">
    <div id="menu-curtain" @click="showMenuItems = !showMenuItems" v-show="showMenuItems"></div>
</transition>

        <div id="main" :class="loading ? 'into-enter-from': 'into-enter-active'">
            <div class="article">
    <div>
        <h1>我的第一份实习（不正经的碎碎念）</h1>
    </div>
    <div class="info">
        <span class="date">
            <span class="icon">
                <i class="fa-solid fa-calendar fa-fw"></i>
            </span>
            2024/4/4
        </span>
        
        <span class="category">
            <a href="/categories/%E7%BB%8F%E5%8E%86/">
                <span class="icon">
                    <i class="fa-solid fa-bookmark fa-fw"></i>
                </span>
                经历
            </a>
        </span>
        
        
        <span class="tags">
            <span class="icon">
                <i class="fa-solid fa-tags fa-fw"></i>
            </span>
            
            
            <span class="tag">
                
                <a href="/tags/%E5%AE%9E%E4%B9%A0/" style="color: #00bcd4">实习</a>
            </span>
            
            <span class="tag">
                
                <a href="/tags/2024/" style="color: #03a9f4">2024</a>
            </span>
            
            <span class="tag">
                
                <a href="/tags/%E5%9B%9E%E5%BF%86/" style="color: #00bcd4">回忆</a>
            </span>
            
        </span>
        
    </div>
    
    <div class="content" v-pre>
        <h3 id="1-怎么了解到这份实习的"><a href="#1-怎么了解到这份实习的" class="headerlink" title="#1 怎么了解到这份实习的"></a>#1 怎么了解到这份实习的</h3><hr>
<p>&emsp;&emsp;很久以前在贺兰群认识飞飞哥哥，在平常的聊天中得知他在中科院实习，太崇拜啦，当时我是这样的：</p>
<img src="https://gitee.com/HamsterYDS/MyImages/raw/master/imgs/fb0bc72f1a588f15fb65ba2528d4061b.jpg" alt="fb0bc72f1a588f15fb65ba2528d4061b" style="zoom:33%;" />

<p>&emsp;&emsp;后来跟飞飞哥哥一起打APEX的时候，聊到他的实习，听说了PLCT实验室，当时飞飞哥哥推荐我试试看，给我发了PLCT实验室招实习生的页面：<a target="_blank" rel="noopener" href="https://github.com/lazyparser/weloveinterns">lazyparser&#x2F;weloveinterns: PLCT Lab ❤️ Interns! (github.com)</a>。我仔细浏览之后，挺心动的，因为自己有一定软件基础，以后想从事硬件（数字IC）方向的工作，需要一块“跳板”（软硬件交叉）作为衔接。</p>
<h3 id="2-做了哪些准备"><a href="#2-做了哪些准备" class="headerlink" title="#2 做了哪些准备"></a>#2 做了哪些准备</h3><hr>
<p>&emsp;&emsp;首先，我去仔细看了招聘界面要求的能力，由于我完全是业余编程爱好者（初高中开发软件也都是出于自己的爱好），也不是计算机科班的学生，所以我完全没有系统的知识，在各种方面都是漏洞百出（烂完了）。</p>
<p>&emsp;&emsp;于是……我就踏上了学习之路，先花了一个半月（12月、1月）系统地学习了计组和RISC-V架构下CPU设计的知识。当时买了一本超厚的书，每天在实验室看。第一遍学习的时候，经常遇到读着读着，概念混乱，开始“看天书”的情况，看了几页之后发觉自己啥都没看进去，就倒回去重看……不过得益于此，我在第一遍学习的时候就打下了良好的基础。这段时间我主要学了RISC-V汇编和计算原理，并理解了基于RISC-V指令设计的CPU的工作机制。第二遍学习的时候，我做了一篇超长的笔记，把自己认为比较隐蔽的知识点记录下来，同时把大框架也整理了一遍（可惜我ipad后来坏掉了，保修给我换新，笔记数据无了，伤心）。当时我还蛮有自信的，感觉自己“倒背如流”。</p>
<p>&emsp;&emsp;学完RISC-V就差不多过春节了，寒假20天我纯摆烂，也没怎么推进。到开学的时候，我意识到时间紧迫，便开始着手学习Linux和Bash。Linux我看的是B站速成课（所以说我在这方面是个完完全全的水货）；Bash的话，我买了一本罗列各种实例的《Bash Shell脚本编程 经典实例》，虽然我之前完全不清楚Bash的基础语法，但是书里的实例看着看着就知道个大概了。总而来说，这段时间学的挺潦草的，也没怎么深入，就学了最基础的部分。</p>
<p>&emsp;&emsp;3月初投完简历之后，为了准备笔试，我又去了解了Makefile等杂七杂八的内容，这里就不赘述了。</p>
<p>&emsp;&emsp;又：本来我打算2月初投简历，考虑到春节临近，实验室那边的老师也要放假，索性改为春节过完返校再投简历……结果刚开学的时候又有一堆事情，一拖再拖，终于在3月初的时候发了申请实习的邮件（飞飞哥哥当时蛮多次问我有没有投，并多次表示“你怎么还没投”，感谢飞飞哥哥监督:D）。</p>
<h3 id="3-笔试的心路历程"><a href="#3-笔试的心路历程" class="headerlink" title="#3 笔试的心路历程"></a>#3 笔试的心路历程</h3><hr>
<p>&emsp;&emsp;投出简历的后一天，PLCT实验室的吴老师就联系上了我，告知我上机考试（笔试）的流程。当时我觉得挺复杂的（可能是因为才接触Linux）：</p>
<blockquote>
<p>实习首先需要通过LV2上机考试，C&#x2F;C++编程基础，2个小时3个题目。<br>考试的时间是根据你的时间来定的，确定好时间之后【请提前1天跟我预约】，白天晚上都可以、平日周末都可以。</p>
<p>考试前15分钟可以登陆进入。请不要提前尝试登陆，密码输入错误IP会被ban两小时。<br>没有使用过 ssh、tmux、命令行环境的同学请提前自学。</p>
<p>开放式。可以上网查询，可以看书，可以从Google上寻找已经有或者类似的答案。禁忌是不可以问其他人。<br>直接求助其他人类视为作弊，失去资格。</p>
</blockquote>
<p>&emsp;&emsp;不得不说，上机考试安排挺人性化，无论是时间自选，还是考试规则。我跟老师预约一周后（3月9日）上机考试，并在这一周里初步学习了ssh、tmux、vim。一开始配置ssh的时候不是很理解这一套机制，还去请教了飞飞哥哥，椽哥哥等人，太感谢他们辣！</p>
<p>&emsp;&emsp;上机考试当天，我怕环境突然抽风出问题，就做了三手准备（XShell、wsl、虚拟机）（毕竟真的很害怕登录不了考试环境直接fail）。不过所幸这部分没出什么幺蛾子——一切都在预料之中，我用XShell登入了考试环境。</p>
<p>&emsp;&emsp;虽然两个小时只用做三道C++题——看起来很简单，但实际上时间很紧……因为不仅要写题解代码，还要写生成测试样例的程序、自动测试的脚本、构建的Makefile，总之就是一整个流程都要跑。写的时候时间不知不觉就过去了，最后一题的测试我都没写完备，随便用随机数生成了一下就交了。考完之后感觉自己两个小时堆了三座屎山……我写的bash都比C++程序好看（但还是很稚嫩，贴在下面了）。</p>
<pre><code class="bash">mkdir ./inputs 2&gt; /dev/null
mkdir ./outputs 2&gt; /dev/null

mode_list=&quot;file_mode screen_mode&quot;

read -p &quot;Please input the number of samples: &quot; amount

echo &quot;Choose a test mode(input the NUMBER)&quot;
echo &quot;  |- 1.File - inputs and outputs will be written to files under ./inputs and ./outputs.&quot;
echo &quot;  |- 2.Screen - inputs and outputs will be displayed on screen directly.&quot;

select mode in $mode_list; do
    if [ &quot;$mode&quot; == &quot;file_mode&quot; ]; then
        echo &quot;File mode on, samples will be output to files...&quot;
        for ((i = 1; i &lt;= amount; i++)); do
            touch &quot;./inputs/input_$&#123;i&#125;.in&quot; 2&gt; /dev/null
            ./task $(./sample_generator | tee &quot;./inputs/input_$&#123;i&#125;.in&quot;) &gt; &quot;./outputs/output_$&#123;i&#125;.out&quot;
        done
        echo &quot;Files generated successfully, check them under ./inputs and ./outputs.&quot;
    else
        echo &quot;Screen mode on, samples will be output to screen.&quot;
        for ((i = 1; i &lt;= amount; i++)); do
            echo &quot;&quot;
            echo &quot;Sample#$&#123;i&#125;&quot;
            ./task $(
                echo -n &quot;  |- Input: &quot; &gt; /dev/tty
                ./sample_generator | tee /dev/tty
                echo -n &quot;  |- Output: &quot; &gt; /dev/tty
            )
        done
        echo &quot;&quot;
    fi
    break
done
</code></pre>
<p>&emsp;&emsp;做完之后，跟吴老师大概地说明了一下项目结构，吴老师说晚上看我的代码。然后最幽默的事情发生了……</p>
<img src="https://gitee.com/HamsterYDS/MyImages/raw/master/imgs/image-20240404161802277.png" alt="image-20240404161802277" style="zoom:50%;" />

<p>&emsp;&emsp;笑点解析：<code>任何时候程序输入不能crash</code>，充分体现我宛如唐氏的代码水平。万幸的是只有这一个小插曲，其他挺顺利地通过了考核。最后吴老师把我和mentor拉了一个小群，进入mentor pick阶段。我本来以为有面试（飞飞哥哥如是说），貌似我这个岗位申请的流程跳过了这一部分？</p>
<img src="https://gitee.com/HamsterYDS/MyImages/raw/master/imgs/image-20240404185609207.png" alt="image-20240404185609207" style="zoom: 80%;" />

<h3 id="4-Mentor-Pick阶段与第一个Task"><a href="#4-Mentor-Pick阶段与第一个Task" class="headerlink" title="#4 Mentor Pick阶段与第一个Task"></a>#4 Mentor Pick阶段与第一个Task</h3><hr>
<blockquote>
<p>mentor加我后第一句话：同学你有RT-Thread开发经验吗？<br>我内心：草？？？？？？？？？？？？？？？？？？？打个圆场吧……</p>
<img src="https://gitee.com/HamsterYDS/MyImages/raw/master/imgs/image-20240404162438098.png" alt="image-20240404162438098" style="zoom:50%;" />
</blockquote>
<p>&emsp;&emsp;虽然说问这个也是情理之中……第一个问题直接开始犯傻有点难绷，总不能不懂装懂吧……不过我投的岗位就是RT-Thread方向的：</p>
<blockquote>
<h4 id="BJ71-RT-Thread-社区实习生"><a href="#BJ71-RT-Thread-社区实习生" class="headerlink" title="BJ71 RT-Thread 社区实习生"></a>BJ71 RT-Thread 社区实习生</h4><p>RT-Thread诞生于2006年，是一款以开源、中立、社区化发展起来的物联网操作系统。 RT-Thread主要采用 C 语言编写，浅显易懂，且具有方便移植的特性（可快速移植到多种主流 MCU 及模组芯片上）。RT-Thread社区是一个开放、开源的社区。RT-Thread拥有非常丰富的软件包，基于这些软件包可以快速构建产品原型。并且拥有较好的POSIX接口支持，可方便的移植Linux应用。为了更好的服务蓬勃发展的RISC-V生态，我们期望可以将RT-Thread已有的软件生态都很好的对接到RISC-V平台上。同时，RT-Thread Smart微内核系统支持用户态应用程序，rootfs等的构建程序，后面也会积极推进Smart for riscv 版本,也欢迎大家积极参与进来！</p>
<h4 id="岗位要求："><a href="#岗位要求：" class="headerlink" title="岗位要求："></a>岗位要求：</h4><ul>
<li>电子、计算机、通信、自动控制等专业；</li>
<li>c语言基础扎实，熟悉计算机体系结构；</li>
<li>熟悉一种或数种嵌入式CPU软硬件平台，例如STM32，RISC-V等；</li>
<li>有强烈的学习能力和学习新知识的欲望；</li>
</ul>
</blockquote>
<p>&emsp;&emsp;一开始我相当心急，想赶快上手做任务，mentor一句“你了解这些要干啥了吗”给我打退了，然后过几天分配了几个稍简单的任务给我，让我先梳理一下要做什么（这应该是在确认我有能力做）。然后就直接给我寄开发板了，最后让我写任务计划（类似于自己给自己列ddl），并将其转发给吴老师之后，进入了签合同的阶段。</p>
<p>&emsp;&emsp;现在说说我的第一个task，是完善RT-Thread对于RISC-V开发板CH32V系列的驱动适配，简而言之就是把CH32V的厂家驱动进行再封装&amp;与RTT提供的接口hook上。这个是一个按图索骥的任务，就拿我已经完成的IIC驱动为例：按照厂家的技术手册（IIC通信过程）和提供的驱动库（各种函数），写若干个封装函数（receive和transmit函数以及IIC初始化函数），接着把封装函数挂载到RT-Thread IIC接口实现的ops结构体下。具体实现过程就不讲了，可以直接去仓库里看我贡献的代码，轻喷（</p>
<ul>
<li><p><a target="_blank" rel="noopener" href="https://github.com/RT-Thread/rt-thread/blob/master/bsp/wch/risc-v/Libraries/ch32_drivers/drv_i2c.c">rt-thread&#x2F;bsp&#x2F;wch&#x2F;risc-v&#x2F;Libraries&#x2F;ch32_drivers&#x2F;drv_i2c.c at master · RT-Thread&#x2F;rt-thread (github.com)</a></p>
</li>
<li><p><a target="_blank" rel="noopener" href="https://github.com/RT-Thread/rt-thread/blob/master/bsp/wch/risc-v/Libraries/ch32_drivers/drv_i2c.h">rt-thread&#x2F;bsp&#x2F;wch&#x2F;risc-v&#x2F;Libraries&#x2F;ch32_drivers&#x2F;drv_i2c.h at master · RT-Thread&#x2F;rt-thread (github.com)</a></p>
</li>
</ul>
<p>&emsp;&emsp;之前没怎么用C写过项目，仅有的一两次经历是大一上的工程导论实践课，因此一开始我不大清楚部分语法。不过写完IIC的驱动适配之后，我感觉自己C的水平又上了一层楼，同时也学会了KConfig等内容，挺开心的，无论是第一次向开源大项目做出贡献，还是自己受益匪浅。</p>
<p>&emsp;&emsp;另外炫耀一下自己收到（白嫖）的三个RISC-V开发板，分别来自飞飞哥哥、mentor和吴老师（真有排面啊）：</p>
<img src="https://gitee.com/HamsterYDS/MyImages/raw/master/imgs/89c6c9082c66df1b1f532796aa39b753_720.jpg" alt="89c6c9082c66df1b1f532796aa39b753_720" style="zoom:33%;" />

<img src="https://gitee.com/HamsterYDS/MyImages/raw/master/imgs/2ee06d4bbf2bbcb4a9d73a75aebea535_720.jpg" alt="2ee06d4bbf2bbcb4a9d73a75aebea535_720" style="zoom:33%;" />

<img src="https://gitee.com/HamsterYDS/MyImages/raw/master/imgs/cb6d99060e40758b08045b3149b33fb8_720.jpg" alt="cb6d99060e40758b08045b3149b33fb8_720" style="zoom:33%;" />

<img src="https://gitee.com/HamsterYDS/MyImages/raw/master/imgs/5ce05850bd5f4055d0e750050a4f711e_720.jpg" alt="5ce05850bd5f4055d0e750050a4f711e_720" style="zoom:33%;" />

<h3 id="5-总结"><a href="#5-总结" class="headerlink" title="#5 总结"></a>#5 总结</h3><hr>
<p>&emsp;&emsp;这是我人生中第一个实习（第一次交个人所得税（bushi））。从准备到申请成功，再到完成第一个task，都让我收获许多。</p>
<p>&emsp;&emsp;最后再做一点无聊的展望——希望我以后能在数字IC的路上坚持走下去，永远保持对技术的好奇心~</p>

    </div>
    
    
    
    
    
    
    
</div>

            <footer id="footer">
    <div id="footer-wrap">
        <div>
            &copy;
            2024 - 2024 白熊の窝
            <span id="footer-icon">
                <i class="fa-solid fa-font-awesome fa-fw"></i>
            </span>
            &commat;白熊_IceBear
        </div>
        
    </div>
</footer>

        </div>
        
        <transition name="fade">
            <div id="preview" ref="preview" v-show="previewShow">
                <img id="preview-content" ref="previewContent" />
            </div>
        </transition>
        
    </div>
    <script src="/js/main.js"></script>
    
    




    
</body>
</html>
